package com.parking.mgr.useraccount.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.parking.mgr.useraccount.model.entity.LoginTokenEntity;
import com.parking.mgr.useraccount.model.param.LoginTokenParam;
import com.parking.mgr.useraccount.model.vo.LoginTokenVO;

import javax.servlet.http.HttpServletRequest;

/**
 * @ClassName LoginTokenService
 * @Description 认证相关
 * @Auther: zhijianpu
 * @Date: 2023/5/25
 */
public interface LoginTokenService extends IService<LoginTokenEntity> {

    /**
     *  保存客户端ID
     */
    void add(LoginTokenParam loginTokenParam, HttpServletRequest request);

    /**
     * 更token过期时间
     * @param loginTokenParam
     */
    void updateExpireTime(LoginTokenParam loginTokenParam);

    /**
     * 更新登录令牌
     *
     * @param token
     * @param passportId
     */
    void updateToken(String token, String passportId, String clientId);

    /**
     * 查找loginToken
     *
     * @param passportId 用户账号ID
     * @return 登录令牌实体
     */
    LoginTokenEntity queryLoginTokenByPassportId(String passportId);

    /**
     * 查询所属用户账号
     *
     * @param token
     * @param clientId
     * @return
     */
    String queryPassportByClientIdToken(String token, String clientId);

    /**
     * 登录令牌获取用户账号
     *
     * @param request
     * @return
     */
    String getPassportIdByToken(HttpServletRequest request);

    /**
     * 获取登录令牌ID
     *
     * @param token
     * @param clientId
     * @return
     */
    String getTokenId(String token, String clientId);

    /**
     * 删除token
     *
     * @param token
     * @param clientId
     */
    void delete(String token, String clientId);

    /**
     * 获取loginTokenEntity
     *
     * @param token
     * @param clientId
     * @return
     */
    LoginTokenEntity getLoginTokenEntity(String token, String clientId);

    /**
     * 登录令牌列表(分页)
     *
     * @param loginTokenParam
     * @return
     */
    IPage<LoginTokenVO> list(LoginTokenParam loginTokenParam);

    /**
     * 查询用户是否登录
     *
     * @param request
     * @return
     */
    boolean isLoginAuth(HttpServletRequest request);
}
